package com.idealighter.game.games.doudizhu.struct;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 斗地主比赛 .
 * 
 * @date 2016年2月24日 下午6:46:18
 *
 */
public class DouDiZhuMatch {
  // 比赛id生成seed
  private static AtomicInteger MATCH_ID_SEED = new AtomicInteger(1);
  // 比赛id
  public final int id;
  // 斗地主比赛所属房间
  public final DouDiZhuRoom room;
  // 比赛类型
  public final int type;
  // 比赛规定人数
  public final int matchNum;
  // 比赛开始时间
  public long matchTime;
  // 申请比赛的人,LinkedHashSet放入数据先后排序的
  public final LinkedHashSet<Long> appliedPlayers = new LinkedHashSet<>();
  // TODO:测试60
  // 申请比赛的人数(假数字)
  // public int applyNum = 90;
  public int applyNum = 0;
  // 比赛中的位置(包括假位置)
  public final List<DouDiZhuAiSeat> seats = new ArrayList<>();
  // 排名已经固定的被淘汰的玩家
  public final Set<DouDiZhuAiSeat> eliminatedSeats = new HashSet<>();
  // 比赛中的桌子(真实的桌子)
  public final List<DouDiZhuTable> tables = new ArrayList<>();
  // 比赛轮数,0轮:代表预赛阶段,大于0：决赛轮数
  public int runs = 0;

  /**
   * 构造函数.
   * 
   * @param room .
   * @param matchNum . 比赛人数 .
   * @param matchTime .
   */
  public DouDiZhuMatch(DouDiZhuRoom room, int matchNum, long matchTime, int type) {
    this.id = MATCH_ID_SEED.getAndIncrement();
    this.room = room;
    this.matchNum = matchNum;
    this.matchTime = matchTime;
    this.type = type;
  }

  /**
   * 真实玩家seats .
   * 
   * @return
   */
  public List<DouDiZhuAiSeat> playerSeats() {
    List<DouDiZhuAiSeat> playerSeats = new ArrayList<>();
    for (DouDiZhuAiSeat seat : seats) {
      if (!seat.isRobot()) {
        playerSeats.add(seat);
      }
    }

    return playerSeats;
  }

  /**
   * 机器人seats .
   * 
   * @return
   */
  public List<DouDiZhuAiSeat> robotSeats() {
    List<DouDiZhuAiSeat> robotSeats = new ArrayList<>();
    for (DouDiZhuAiSeat seat : seats) {
      if (seat.isRobot()) {
        robotSeats.add(seat);
      }
    }

    return robotSeats;
  }

}
